/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package appstudio7i.controladores;

import appstudio7i.excepciones.CodigoServicioRegistradoException;
import appstudio7i.excepciones.ServicioRegistradoException;
import appstudio7i.modelo.Servicio;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.ArrayList;

/**
 *
 * @author mcalderon
 */
public class AdmServicio {
    private ArrayList<Servicio> servicios = new ArrayList<Servicio>();
    private String rutaServicio = "servicios.txt";
    
    public AdmServicio() {
        cargarDatos();
        }

    public ArrayList<Servicio> cargarDatos() {
        FileReader fr = null;
        BufferedReader br = null;
        try {
            fr = new FileReader(rutaServicio);
            br = new BufferedReader(fr);
            String linea;

            Servicio servicio = null;
            while ((linea = br.readLine()) != null) {
                String [] datos = linea.split(";");
                servicio = new Servicio(datos[0], datos[1], BigDecimal.valueOf(Double.valueOf(datos[2])));
                servicios.add(servicio);
            }
        }catch (FileNotFoundException e){
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != fr) {
                    fr.close();
                }
            } catch (Exception ee){
                ee.printStackTrace();
            }
        }
        return servicios;

    }

    //registra servicios    
    public boolean registrarServicio(String codigo, String nombre, BigDecimal costo) {
        //verificando los datos del instrumento
        
        
        //validar datos de servicio
        verficarCodigoExistente(codigo);
        //verificar si el nombre del nuevo servicio ya esta registrado
        
        verficarSevicioExistente(nombre);
        
        Servicio nuevoServicio = new Servicio(codigo, nombre, costo);

        servicios.add(nuevoServicio);
        
        //actualizando archivo de salas
        actualizaServicios();

        return true;
    }
    
    
    public Servicio obtenerServicio(String codigo) {         
         for(Servicio servicio : servicios){
            if(servicio.getCodigo().equals(codigo))
                return servicio;
            }
         return null;
        }

    public int obtenerTotalServicios() {
        return servicios.size();
    }

    public void verficarCodigoExistente(String codigo) {
        
        for (Servicio servicio : servicios) {
            if (servicio.getCodigo().equals(codigo)) {
                System.out.println("OK");
                throw new CodigoServicioRegistradoException("El Codigo: " + codigo + " ya se encuentra registrado");
            }            
        }
    }

    public void verficarSevicioExistente(String nombre) {
        for (Servicio servicio : servicios) {
            if (servicio.getNombre().equals(nombre)) {
                throw new ServicioRegistradoException("El Servicio: " + nombre + " ya se encuentra registrado");
            }            
        }
    }
    
    
    private void actualizaServicios() {
        //System.out.println("Total: " + salas.size() + " - rutaSalas: " + rutaSalas);
        try {
            PrintWriter pwServicios = new PrintWriter(new FileWriter(rutaServicio));
            for(Servicio _servicios : servicios){                
                pwServicios.println(_servicios.getCodigo() + ";"
                         + _servicios.getNombre() + ";"
                         + _servicios.getCosto() + ";"
                        );
            }
            pwServicios.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
                  

}
